#ifndef _CONTAINER_INSERT_H_
#define _CONTAINER_INSERT_H_

#include "./stl_util_define.h"

namespace Container {

	using namespace std;
	/*!
		operator for inserting objects in a vector
		\param set container to be used
		\param obj object to be inserted
		\return reference to the set, so you can keep inserting
		\code
		vector<int> set;
		set, 1, 2, 3, 4;
		cout << set << endl; // prints [ 1 2 3 4 ]
		\endcode
	*/
	template <class Tipo>
		inline vector<Tipo>& operator , ( vector<Tipo> &set, const Tipo &obj ) {
			set.push_back(obj);
			return set;
		};

	/*!
		operator for inserting objects in a vector
		\param set container to be used
		\param obj object to be inserted
		\return reference to the set, so you can keep inserting
		\code
		queue<int> set;
		set, 1, 2, 3, 4;
		cout << set << endl; // prints [ 1 2 3 4 ]
		\endcode
	*/
	template <class Tipo>
		inline queue<Tipo>& operator , ( queue<Tipo> &set, const Tipo &obj){
			set.push(obj);
			return set;
		};

	/*!
		operator for inserting objects in a vector
		\param set container to be used
		\param obj object to be inserted
		\return reference to the set, so you can keep inserting
		\code
		stack<int> set;
		set, 1, 2, 3, 4;
		cout << set << endl; // prints [ 1 2 3 4 ]
		\endcode
	*/
	template <class Tipo>
		inline stack<Tipo>& operator , ( stack<Tipo> &set, const Tipo &obj){
			set.push(obj);
			return set;
		};

	/*!
		operator for inserting objects in a vector
		\param set container to be used
		\param obj object to be inserted
		\return reference to the set, so you can keep inserting
		\code
		deque<int> set;
		set, 1, 2, 3, 4;
		cout << set << endl; // prints [ 1 2 3 4 ]
		\endcode
	*/
	template <class Tipo>
		inline deque<Tipo>& operator , ( deque<Tipo> &set, const Tipo &obj){
			set.push_back(obj);
			return set;
		};

};

#endif // _CONTAINER_INSERT_H_
